<?php

/**
 * Controller frontend do sistema.
 * @package Controllers
 * @name Home_Controller
 * @category Site
 * @author carlos o carvalho <contato@carlosocarvalho.com.br>
 * @version 1.0.1
 * @class B 
 * 
 */
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

class home extends Public_Controller {

    private $taxas_admin;

    public function __construct() {
        parent::__construct();

        $this->load->library('User_Manager');

        $this->users_online->start();
        $this->data ['printCatalogo'] = false;
        $this->data ['info_habilitacao'] = '';
        $this->data ['favoritos_user'] = array();
        if (userData()->id > 0) {
            $this->data ['favoritos_user'] = $this->Favoritos_M->all_info(array(
                        'USER_ID' => userData()->id
                    )) ? $this->Favoritos_M->all_info(array(
                        'USER_ID' => userData()->id
                    )) : array();
        }
    }

    /**
     * IndexHome
     * 
     */
    public function index() {
        $this->verify_closed();
        $this->data ['estados_count'] = $this->Estados_M->get_count_lotes();
        $this->data ['categories_count'] = $this->Categories_M->get_count_lotes();
        $this->data ['sidebar'] = $this->load->view('frontend/public/sidebar', $this->data, true);

        $this->data ['type_aba_active'] = 'ALL_OPEN';
        $this->data ['data_leiloes'] = $this->Leilao_Model->get_with_comitentes_by_date();
        // $this->data['navbar_header'] = $this->load->view('frontend/public/navbar_header',$this->data,true);

        $this->template(array(
            'frontend/public/home'
        ));
    }

    function directLeiloes() {
        $this->data ['type_aba_active'] = 'DIRECT';
        $this->data ['data_leiloes'] = $this->Leilao_Model->get_with_comitentes_direct();
        $this->template(array(
            'frontend/public/home'
        ));
    }

    function cadastro($tipo = null) {
        $this->data ['interesses'] = $this->db->order_by('order', 'ASC')->get('categorias')->result();
        $page = 'frontend/public/cadastro';
        if (!is_null($tipo) && $tipo == 'juridica') :
            $page = 'frontend/public/cadastro_juridico';

        endif;
        if (!is_null($tipo) && $tipo == 'fisica') :
            $page = 'frontend/public/cadastro_fisico';
        endif;
        $this->template(array(
            $page
        ));
    }

    function contato($num1 = null, $num2 = null) {
        $this->data ['num_1'] = $num1;
        $this->data ['num_2'] = $num2;
        $this->template(array(
            'frontend/public/contato'
        ));
    }

    function sobre() {
        $this->template(array(
            'frontend/public/quem-somos'
        ));
    }

    function imprensa() {
        $this->template(array(
            'frontend/public/imprensa'
        ));
    }

    function p_privacidade() {
        $this->template(array(
            'frontend/public/politica-privacidade'
        ));
    }

    function p_seguranca() {
        $this->template(array(
            'frontend/public/politica-seguranca'
        ));
    }

    function quero_vender() {
        $this->data ['_captcha'] = $this->_create_captcha();

        $this->template(array(
            'frontend/public/quero-vender'
        ));
    }

    function duvidas() {
        $this->template(array(
            'frontend/public/duvidas'
        ));
    }

    function quero_comprar() {

        $this->data['categorias'] = $this->Categories_M->get();
        $this->template(array(
            'frontend/public/quero-comprar'
        ));
    }

    function lotes($by_slug) {
        $rs = $this->db->select('lt.*,le.*,cl.*,uf.uf,ci.nome as localizacao,cat.slug ,tp.slug as slug_tipo_ativo, tp.name as tipo_ativo')->from('lotes as lt')->join('tipo_ativos as tp', 'lt.tipo_ativo_id = tp.id', 'left')->join('categorias as cat', 'cat.id = tp.categoria_id')->join('leiloes as le', 'le.ID = lt.LEILAO_ID')->join('cidades as ci', 'ci.id = lt.cidade', 'left')->join('estados as uf', 'uf.id = ci.estado', 'left')->join('comitentes as cl', 'cl.ID=le.cliente_id', 'left')->where(array(
                    'cat.slug' => $by_slug,
                    'le.status' => 1
                ))->order_by('lt.FECHAMENTO,lt.num_lote', 'ASC')->get();
        $this->data ['lotes_data'] = $rs->result();

        // $this->data['lotes_data'] = $this->lotes_model->get_by_categorie($by_slug);

        $this->template(array(
            'frontend/public/lotes_loop'
        ));
    }

    function FilterBycidade($categoria = 'todos', $filterByTipo = 'todos', $estado, $cidade) {
        $uf = substr($estado, - 2);
        $this->data ['categorie'] = $categoria;
        $this->data ['localization'] = $uf;
        $this->data ['by_cidade'] = true;
        $this->db->select('lt.*,le.*,cl.*,uf.uf,uf.id as cod ,ci.nome as localizacao,cat.slug ,tp.slug as slug_tipo_ativo, tp.name as tipo_ativo')->from('lotes as lt')->join('tipo_ativos as tp', 'lt.tipo_ativo_id = tp.id', 'left')->join('categorias as cat', 'cat.id = tp.categoria_id')->join('leiloes as le', 'le.ID = lt.LEILAO_ID')->join('cidades as ci', 'ci.id = lt.cidade', 'left')->join('estados as uf', 'uf.id = ci.estado', 'left')->join('comitentes as cl', 'cl.ID=le.cliente_id', 'left')->where(array(
            'le.status' => 1,
            'uf.uf' => $uf,
            'ci.slug' => $cidade
        ))->order_by('lt.FECHAMENTO,lt.num_lote', 'ASC');
        if ($categoria !== 'todas') {
            $this->db->where(array(
                'cat.slug' => $categoria
            ));
        }

        $rs = $this->db->get();
        $this->data ['lotes_data'] = $rs->result();

        // $this->data['lotes_data'] = $this->lotes_model->get_by_categorie($by_slug);

        $this->template(array(
            'frontend/public/lotes_loop'
        ));
    }

    function updateCidades() {
        $rsd = $this->db->get('cidades')->result_array();
        $upd = array();
        foreach ($rsd as $key => $row) {

            $row ['slug'] = to_url_friend($row ['nome']);
            $upd [] = $row;
        }

        $this->db->update_batch('cidades', $upd, 'id');
    }

    function FilterByUf($categoria = 'todos', $filterByTipo = 'todos', $loc = 'todos', $cidade = 'todos') {
        $uf = $loc != 'todos' ? substr($loc, - 2) : false;

        $this->data ['categorie'] = $categoria;
        $this->data ['localization'] = $uf;
        $this->data ['filterTipo'] = $filterByTipo;
        $this->data ['by_cidade'] = $cidade != 'todos' ? $cidade : false;

        $categoria = $categoria == 'todos' ? null : $categoria;
        $uf = $loc == 'todos' ? null : $loc;
        $this->data ['count_estados'] = $this->Estados_M->get_count_lotes_by_slug($categoria);
        $this->data ['count_categories'] = $this->Categories_M->get_with_subcategories(null, $categoria, $uf);
        $this->data ['lotes'] = $this->Lotes_M->get_all_by_leilao(null, $categoria, $uf);

        $this->template(array(
            'frontend/public/lotes_loop'
        ));
    }

    function pesquisa() {


        $this->data ['data_search'] = $this->gets ['q'];

        if (empty($this->gets ['q'])) {
            redirect();
        }
        $this->data ['categorie'] = 'todos';
        $this->data ['localization'] = false;
        $this->data ['filterTipo'] = 'todos';
        $this->data ['by_cidade'] = false;

        $this->data ['count_estados'] = $this->Estados_M->get_count_search($this->gets ['q']);
        $this->data ['count_categories'] = $this->Categories_M->get_with_subcategories_search($this->gets ['q']);
        $this->data ['lotes'] = $this->Lotes_M->get_all_by_search($this->gets ['q']);



        $this->template('frontend/public/lotes_loop');

        /*
         * $rs = $this->db->select ( 'lt.*,le.*,cl.*,uf.uf,ci.nome as localizacao,cat.slug ,tp.slug as slug_tipo_ativo, tp.name as tipo_ativo' )->from ( 'lotes as lt' )->join ( 'tipo_ativos as tp', 'lt.tipo_ativo_id = tp.id', 'left' )->join ( 'categorias as cat', 'cat.id = tp.categoria_id' )->join ( 'leiloes as le', 'le.ID = lt.LEILAO_ID' )->join ( 'cidades as ci', 'ci.id = lt.cidade', 'left' )->join ( 'estados as uf', 'uf.id = ci.estado', 'left' )->join ( 'comitentes as cl', 'cl.ID=le.cliente_id', 'left' )->where ( '(`lt`.`desclote` LIKE "%' . $_get ['q'] . '%" AND `le`.`status` = 1) OR (`lt`.`titulo` LIKE "%' . $_get ['q'] . '%" AND `le`.`status` = 1)' ) //->like('lt.titulo',$_get['q']) ->order_by->('lt.FECHAMENTO,lt.num_lote', 'ASC' )->get (); $this->data ['total_results'] = $rs->num_rows (); $this->data ['lotes_data'] = $rs->result ();
         */
        // $this->data['lotes_data'] = $this->lotes_model->get_by_categorie($by_slug);
    }

    function get_condicoes_pagamento($id = null) {
        $data ['json'] = !is_null($id) ? false : true;
        $id = !is_null($id) ? $id : $this->input->post('leilao_id');

        if (!$this->Condicoes_Vendas_M->by_leilao($id)) {
            echo Utils::message('no_condition');
            return;
        }
        $data ['condicao'] = $this->Condicoes_Vendas_M->by_leilao($id);
        $data ['condicao']->LOTES = '';
        $this->load->view('frontend/public/condicoes_pagamento', $data);
    }

    function is_habilitacao($id, $uid) {
        $has = Utils::getHabilitacao($uid, $id);

        echo '<center>' . add_image('logo.png', 'width="180px"') . '<br/><br/>';
        if ($has->BLOCKED == 'N') {
            echo Utils::message('desblocked_user');
        } else {
            printf(Utils::message('blocked_user'), site_url('sending-app-key-' . $uid . '-' . $id . '.html'));
        }

        echo '</center>';
    }

    function reSendingHabilitacao($uid, $id) {
        $this->get_habilitacao($id, $uid);
    }

    function get_habilitacao($id = null, $uid = null) {
        $id = !is_null($id) ? $id : $this->input->post('leilao_id');
        $uid = !is_null($uid) ? $uid : $this->input->post('id');
        $le = $this->Condicoes_Vendas_M->habilitacao($id);

        $_mail = $this->tpl_mail_send;
        if (!is_null($uid)) {
            $user = $this->Users_M->all_info($uid);
        }

        if (!$this->Condicoes_Vendas_M->habilitacao($id)) {
            echo Utils::message('no_condition');
            return;
        }
        Utils::saveHabilitacao($uid, $id);
        $key = Utils::createKeyHabilitacao($uid, $id);
        $a_link = site_url('/home/sHabilitacao/' . $key);
        $r_link = site_url('/home/rHabilitacao/' . $key);
        $data ['LINK_ACEITACAO_LEILAO'] = '<a href="' . $a_link . '">Aceitar</a> <br/>' . $a_link;
        $data ['LINK_REJEICAO_LEILAO'] = '<a href="' . $r_link . '">Rejeitar</a> <br/>' . $r_link;
        $data ['NOME'] = $user->NOME;
        $data ['LEILAO_ID'] = $le->ID;
        $data ['TITLE'] = utf8_decode($le->TITLE);
        $data ['DATA'] = $le->DATA;
        $data ['LOTES'] = $le->LOTES;
        $_mail->to($user->EMAIL);
        $_mail->subject('Solicitação de Habilitação');
        $_mail->data($data);
        echo '<center>' . add_image('logo.png', 'width="180px"') . '<br/><br/>';
        if ($_mail->send('cadastro', 'solicitacao_habilitacao') === TRUE) {
            $message = Utils::message('sending_mail_habilitation_user');
        } else {
            $message = Utils::message('no_sending_mail_habilitation_user');
        }
        echo $message;
        echo '</center>';
    }

    function rHabilitacao() {
        redirect('home');
    }

    function sHabilitacao($key) {
        $row = $this->Habilitacoes_M->get_by(array(
            'KEY_HASH' => $key
                ), TRUE);

        if ($row) {

            // check if is not activate
            if ($row->BLOCKED == 'S') {

                $user = $this->Users_M->all_info($row->USER_ID);
                $is_cond = $this->Condicoes_Vendas_M->habilitacao($row->LEILAO_ID);
                if ($is_cond) {
                    $le ['condicao'] = $is_cond;
                    $le ['condicao']->COD_LEILAO = $row->LEILAO_ID;
                    $_mail = $this->tpl_mail_send;
                    $data ['NOME'] = $user->NOME;
                    $data ['LEILAO_INFO'] = $le ['condicao']->ID;
                    $data ['LOTES_INFO'] = $le ['condicao']->LOTES;
                    $data ['CURRENT_TIME'] = date('d/m/Y H:i:s');
                    $data ['CPF'] = $user->CPF_CNPJ;
                    $data ['RG'] = $user->RG_IE;
                    $data ['EMAIL'] = $user->EMAIL;
                    $data ['IP_USER'] = $this->input->ip_address();

                    $this->data ['key'] = $key;
                    $this->data ['CONDICAO_VENDA'] = $this->load->view('frontend/public/condicoes_pagamento', $le, TRUE);

                    $this->template('frontend/public/confirmar_habilitacao');

                    return;
                }
                Utils::FlashMessage(Utils::message('no_condition'));
            }

            Utils::FlashMessage(Utils::message('has_qualification'));
        }

        redirect('/');
    }

    function rejectQualification($key) {
        $row = $this->Habilitacoes_M->delete_by(array(
            'KEY_HASH' => $key
        ));
        redirect(site_url());
    }

    function acceptQualification($key) {
        $row = $this->Habilitacoes_M->get_by(array(
            'KEY_HASH' => $key
                ), TRUE);

        Utils::FlashMessage(Utils::message('has_qualification'));

        if ($row) {

            // check if is not activate
            if ($row->BLOCKED == 'S') {

                $user = $this->Users_M->all_info($row->USER_ID);

                $le ['condicao'] = $this->Condicoes_Vendas_M->habilitacao($row->LEILAO_ID);
                $le ['condicao']->COD_LEILAO = $row->LEILAO_ID;
                $_mail = $this->tpl_mail_send;
                $data ['NOME'] = $user->NOME;
                $data ['LEILAO_INFO'] = $le ['condicao']->ID;
                $data ['LOTES_INFO'] = $le ['condicao']->LOTES;
                $data ['CURRENT_TIME'] = date('d/m/Y H:i:s');
                $data ['CPF'] = $user->CPF_CNPJ;
                $data ['RG'] = $user->RG_IE;
                $data ['EMAIL'] = $user->EMAIL;
                $data ['IP_USER'] = $this->input->ip_address();

                $data ['CONDICAO_VENDA'] = utf8_decode($this->load->view('frontend/public/condicoes_pagamento', $le, TRUE));
                $_mail->data($data);
                $_mail->subject('Confirmação de Habilitação');
                $_mail->to($user->EMAIL);

                $_mail->send('cadastro', 'confirmacao_habilitacao');

                $this->Habilitacoes_M->save(array(
                    'BLOCKED' => 'N'
                        ), $row->ID);

                Utils::FlashMessage(Utils::message('congratulations_qualification'));
            } else {

                // Utils::FlashMessage('Sua habilitação já está ativada','danger');
            }
        }

        redirect(site_url());
    }

    function save_news_letter() {
        $data = array(
            'NAME' => $this->input->post('name'),
            'EMAIL' => $this->input->post('email'),
            'STATUS' => 'S'
        );
        $json ['error'] = true;

        $exist_email = $this->Newsletter_M->get_by(array('EMAIL' => $this->input->post('email')), true);
        if ($exist_email) {
            $json ['message'] = lang_system('duplicate_email');
        } else {
            $save = $this->Newsletter_M->save($data);
            if ($save) {
                $json ['error'] = false;
                $json ['message'] = lang_system('save_success');
            }
        }

        header('content-type:text/json;charset="utf-8;"');
        echo json_encode($json);
    }

    function save_new_cliente() {
        $cpf = $this->input->post('cpf') ? $this->input->post('cpf') : $this->input->post('cnpj');
        $name = $this->input->post('nome') ? $this->input->post('nome') : $this->input->post('razao');
        $name_f = $this->input->post('razao') ? $this->input->post('razao') : '';
        // / $this->key_activation = hash('sha512', date('d-m-YH:i:s') . $this->input->post('login'));

        $cpf = clear_number($cpf);
        $data = array(
            'NOME' => strtoupper($name),
            'NOME_FANTASIA' => strtoupper($name_f),
            'EMAIL' => $this->input->post('email'),
            'EMAIL_ALTERNATIVO' => $this->input->post('email-alternativo'),
            'LOGRADOURO' => $this->input->post('endereco'),
            'SEXO' => $this->input->post('sexo') ? $this->input->post('sexo') : 'J',
            'NUMERO' => $this->input->post('numero'),
            'BAIRRO' => $this->input->post('bairro'),
            'CIDADE' => $this->input->post('cidade'),
            'UF' => $this->input->post('uf'),
            'PROFISSAO' => $this->input->post('profissao'),
            'TELEFONE_CONTATO' => clear_number($this->input->post('telefone_contato')),
            'TELEFONE_2' => clear_number($this->input->post('telefone_2-ddd')) . clear_number($this->input->post('telefone_2')),
            'CEP' => clear_number($this->input->post('cep')),
            'CONTATO' => $this->input->post('contato') ? $this->input->post('contato') : $name,
            'CPF_CONTATO' => $this->input->post('cpf_representante') && !$this->input->post('cpf') ? clear_number($this->input->post('cpf_representante')) : $cpf,
            'NACIONALIDADE' => $this->input->post('nacionalidade'),
            'COMPLEMENTO' => $this->input->post('complemento'),
            'LOGIN' => $this->input->post('login'),
            'BAIRRO' => $this->input->post('bairro'),
            'PWD' => $this->input->post('password'),
            'CPF_CNPJ' => $cpf,
            'RG_IE' => $this->input->post('rg') ? clear_number($this->input->post('rg')) : clear_number($this->input->post('ie')),
            'INTERESSES' => count($_POST ['areas']) > 0 ? implode(',', $_POST ['areas']) : '',
            'TELEFONE' => clear_number($this->input->post('telefone-ddd')) . clear_number($this->input->post('telefone-numero')),
            'CELULAR' => clear_number($this->input->post('celular-ddd')) . clear_number($this->input->post('celular-numero')),
            'CREATE' => date('Y-m-d H:i:s'),
            'TIPO' => $this->input->post('tipo'),
            'NOME_MAE' => $this->input->post('nome-mae'),
            'NASCIMENTO' => $this->input->post('nascimento') ? auto_format_data($this->input->post('nascimento'), '/') : date('Y-m-d H:i:s')
        );

        if ($this->user_manager->register($data)) {

            $_mail = $this->tpl_mail_send;
            $_mail->to($this->input->post('email'));
            $data ['CURRENT_TIME'] = '';
            $data ['IP_USER'] = $this->input->ip_address();
            $data ['CURRENT_TIME'] = date('H:i:s');
            $data ['DATA'] = date('d/m/Y');
            $_mail->data($data);
            $_mail->subject('Bem vindo');
            if ($_mail->send('cadastro', 'cadastro') === TRUE) {
                return true;
            }

            return false;
        }

        return false;
    }

    function processarContato($num1 = null, $num2 = null) {
        $this->load->library('form_validation');
        $config = array(
            array(
                'field' => 'assunto',
                'label' => 'Assunto',
                'rules' => 'required'
            ),
            array(
                'field' => 'nome',
                'label' => 'Nome',
                'rules' => 'required'
            ),
            array(
                'field' => 'email',
                'label' => 'Email',
                'rules' => 'required|valid_mail'
            ),
            array(
                'field' => 'telefone-ddd',
                'label' => '11',
                'rules' => 'trim|required|numeric'
            ),
            array(
                'field' => 'telefone-numero',
                'label' => 'Telefone',
                'rules' => 'trim|required|numeric'
            )
        );

        $this->form_validation->set_rules($config);
        if ($this->form_validation->run() == FALSE) {
            $this->contato($num1, $num2);
        } else {

            $this->config->load('email', TRUE);
            $_mail = $this->tpl_mail_send;
            $_to = $this->config->item('emails_sending', 'email');
            $data = array(
                'EMAIL' => $this->input->post('email'),
                'MESSAGE' => $this->input->post('mensagem'),
                'NOME' => $this->input->post('nome'),
                'TELEFONE' => '(' . $this->input->post('telefone-ddd') . ')' . $this->input->post('telefone-numero')
            );
            $_mail->data($data);
            $_mail->to($_to);
            $_mail->subject($this->input->post('assunto'));
            Utils::FlashMessage(Utils::message('fail_send_mail_contact'), 'error danger');
            if ($_mail->send('contato', 'contato')) {
                Utils::FlashMessage(Utils::message('success_send_mail_contact'));
            }

            redirect('contato.html');
        }
    }

    function _create_captcha() {
        // we will first load the helper. We will not be using autoload because we only need it here
        $this->load->helper('captcha');
        // we will set all the variables needed to create the captcha image
        // ...and store the captcha word in a session
        $this->_createWord();
        // we will return the image html code
        $vals = array(
            'word' => $this->word,
            'img_path' => BASESITE . 'public/captcha/',
            'img_url' => '/public/captcha/',
            'img_width' => '100',
            'img_height' => 32,
            'expiration' => 7200
        );

        $cap = create_captcha($vals);

        $this->session->set_userdata('captchaword', $cap ['word']);
        return $cap ['image'];
    }

    function reload_captcha() {
        echo $this->_create_captcha();
    }

    public function check_captcha($string) {
        if ($string == $this->session->userdata('captchaword')) {
            return TRUE;
        } else {
            $this->form_validation->set_message('check_captcha', Utils::message('cod_captcha_invalid'));
            return FALSE;
        }
    }

    function savePessoaFisica() {
        if ($this->validatePessaoFisica() == FALSE) {
            $this->cadastro('fisica');
        } else {
            $this->session->set_flashdata('success_fale_conosco', 'Cadastro processado com sucesso, para ativar seu cadastro verifique seus emails');
            $this->save_new_cliente();
            redirect('cadastre-se/fisica');
        }
    }

    private function validatePessaoFisica() {
        $this->load->library('form_validation');
        $config = array(
            array(
                'field' => 'nome',
                'label' => 'Nome',
                'rules' => 'required'
            ),
            array(
                'field' => 'cpf',
                'label' => 'CPF',
                'rules' => 'required|cpf|callback__is_unique[profiles.CPF_CNPJ]|callback_validate_cpf'
            ),
            array(
                'field' => 'cep',
                'label' => 'CEP',
                'rules' => 'required'
            ),
            array(
                'field' => 'rg',
                'label' => 'Rg',
                'rules' => 'required'
            ),
            array(
                'field' => 'nome-mae',
                'label' => 'Nome da mãe',
                'rules' => 'required'
            ),
            array(
                'field' => 'nascimento',
                'label' => 'Data de nascimento',
                'rules' => 'required|trim|xss_clean'
            ),
            array(
                'field' => 'estado_civil',
                'label' => 'Estado civil',
                'rules' => 'required'
            ),
            'login' => array(
                'field' => 'login',
                'label' => 'Apelido',
                'rules' => 'required|max_length[12]|is_unique[users.LOGIN]'
            ),
            array(
                'field' => 'endereco',
                'label' => 'Endereço',
                'rules' => 'required'
            ),
            array(
                'field' => 'nacionalidade',
                'label' => 'Nacionalidade',
                'rules' => ''
            ),
            array(
                'field' => 'cidade',
                'label' => 'Cidade',
                'rules' => 'required'
            ),
            array(
                'field' => 'uf',
                'label' => 'Estado',
                'rules' => 'required|max_length[2]'
            ),
            array(
                'field' => 'numero',
                'label' => 'NÃºmero',
                'rules' => 'required'
            ),
            array(
                'field' => 'numero',
                'label' => 'Número',
                'rules' => 'required'
            ),
            array(
                'field' => 'bairro',
                'label' => 'Bairro',
                'rules' => 'required'
            ),
            array(
                'field' => 'areas[]',
                'label' => 'Área de interesses',
                'rules' => 'required|min_length'
            ),
            array(
                'field' => 'aceitar_termo',
                'label' => 'Termos e Condições',
                'rules' => 'required'
            ),
            array(
                'field' => 'password_confirm',
                'label' => 'Confirmar Senha',
                'rules' => 'required|callback_confirm_password'
            ),
            array(
                'field' => 'password',
                'label' => 'Senha',
                'rules' => 'required'
            ),
            array(
                'field' => 'email',
                'label' => 'Email',
                'rules' => 'required|valid_mail||is_unique[profiles.EMAIL]'
            ),
            array(
                'field' => 'email-alternativo',
                'label' => 'Email Alternativo',
                'rules' => 'valid_mail|callback_email_diff'
            ),
            array(
                'field' => 'celular-ddd',
                'label' => 'Celular ddd',
                'rules' => 'trim|required|numeric'
            ),
            array(
                'field' => 'celular-numero',
                'label' => 'Celular',
                'rules' => 'trim|required|numeric'
            )
        );

        $this->form_validation->set_rules($config);

        return $this->form_validation->run() == FALSE ? FALSE : TRUE;
    }

    function validate_cpf($str) {
        if (!validate_cpf(clear_cpf_cnpj($str))) {
            $this->form_validation->set_message('validate_cpf', 'O %s não é válido');
            return false;
        }
        return true;
    }

    function callback_clear_cep($str) {
        return clear_cpf_cnpj($str);
    }

    function savePessoaFisica_ajax() {
        $data ['error'] = true;

        if ($this->validatePessaoFisica() == FALSE) {
            $data ['message'] = validation_errors();
        } else {
            $data ['message'] = 'Cadastro processado com sucesso, para ativar seu cadastro verifique seus emails';
            $this->save_new_cliente();
            $data ['error'] = false;
        }

        header('content-type:text/json;');

        echo json_encode($data);
    }

    function savePessoaJuridica_ajax() {
        $data ['error'] = true;

        if ($this->validatePessoaJuridica() == FALSE) {
            $data ['message'] = validation_errors();
        } else {
            $data ['message'] = 'Cadastro processado com sucesso, para ativar seu cadastro verifique seus emails';
            $this->save_new_cliente();
            $data ['error'] = false;
        }

        header('content-type:text/json;');

        echo json_encode($data);
    }

    function savePessoaJuridica() {
        if ($this->validatePessoaJuridica() == FALSE) {
            $this->cadastro('juridica');
        } else {
            $this->session->set_flashdata('success_fale_conosco', 'Cadastro processado com sucesso,para ativar seu cadastro verifique seus emails');
            $this->save_new_cliente();
            redirect('cadastre-se/juridica');
        }
    }

    private function validatePessoaJuridica() {
        $this->load->library('form_validation');
        $config = array(
            array(
                'field' => 'razao',
                'label' => 'Razão',
                'rules' => 'required'
            ),
            array(
                'field' => 'cnpj',
                'label' => 'CNPJ',
                'rules' => 'required|callback__is_unique[profiles.CPF_CNPJ]|callback_validate_cnpj'
            ),
            array(
                'field' => 'nome_fantasia',
                'label' => 'Nome Fantasia',
                'rules' => 'required'
            ),
            array(
                'field' => 'cep',
                'label' => 'CEP',
                'rules' => 'required'
            ),
            array(
                'field' => 'ie',
                'label' => 'IE',
                'rules' => 'trim'
            ),
            array(
                'field' => 'contato',
                'label' => 'Contato',
                'rules' => 'required'
            ),
            array(
                'field' => 'cpf_representante',
                'label' => 'cpf contato',
                'rules' => ''
            ),
            'login' => array(
                'field' => 'login',
                'label' => 'Apelido',
                'rules' => 'required|max_length[12]|is_unique[users.LOGIN]'
            ),
            array(
                'field' => 'endereco',
                'label' => 'Endereço',
                'rules' => 'required'
            ),
            array(
                'field' => 'nacionalidade',
                'label' => 'Nacionalidade',
                'rules' => ''
            ),
            array(
                'field' => 'cidade',
                'label' => 'Cidade',
                'rules' => 'required'
            ),
            array(
                'field' => 'uf',
                'label' => 'Estado',
                'rules' => 'required'
            ),
            array(
                'field' => 'numero',
                'label' => 'Número',
                'rules' => 'required'
            ),
            array(
                'field' => 'numero',
                'label' => 'NÃºmero',
                'rules' => 'required'
            ),
            array(
                'field' => 'areas[]',
                'label' => 'Áreas de interesses',
                'rules' => 'required|min_length'
            ),
            array(
                'field' => 'aceitar_termo',
                'label' => 'Termos e Condições',
                'rules' => 'required'
            ),
            array(
                'field' => 'password_confirm',
                'label' => 'Confirmar Senha',
                'rules' => 'required|callback_confirm_password'
            ),
            array(
                'field' => 'password',
                'label' => 'Senha',
                'rules' => 'required'
            ),
            array(
                'field' => 'email',
                'label' => 'Email',
                'rules' => 'required|valid_mail|is_unique[profiles.EMAIL]'
            ),
            array(
                'field' => 'email-alternativo',
                'label' => 'Email Alternativo',
                'rules' => 'valid_mail|callback_email_diff'
            ),
            array(
                'field' => 'telefone-ddd',
                'label' => 'ddd ',
                'rules' => 'trim|required|numeric'
            ),
            array(
                'field' => 'telefone-numero',
                'label' => 'Telefone',
                'rules' => 'trim|required'
            )
        );

        $this->form_validation->set_rules($config);

        if ($this->form_validation->run() == FALSE) {
            return false;
        }
        return true;
    }

    function validate_cnpj($str) {
        if (!validate_cnpj($str)) {
            $this->form_validation->set_message('validate_cnpj', 'O %s não é válido');
            return false;
        }
        return true;
    }

    public function confirma_password($str) {
        if ($this->input->post('password') !== $str) {
            $this->form_validation->set_message('password_confirm', 'O %s não é igual a senha');
            return FALSE;
        } else {
            return TRUE;
        }
    }

    public function _is_unique($str, $field) {
        list ( $table, $field ) = explode('.', $field);
        $query = $this->db->limit(1)->get_where($table, array(
            $field => str_replace(array(
                '.',
                '/',
                '-'
                    ), array(
                '',
                '',
                ''
                    ), $str)
        ));

        if ($query->num_rows() > 0) {

            $this->form_validation->set_message('_is_unique', 'O %s já foi cadastrado');
            return FALSE;
        }
        return true;
    }

    function email_diff($str) {
        if ($this->input->post('email') == $str && !empty($str)) {
            $this->form_validation->set_message('email_diff', 'O %s deve ser diferente do email ');
            return FALSE;
        } else {
            return TRUE;
        }
    }

    function saveQueroVender() {
        $this->load->library('form_validation');
        $config = array(
            array(
                'field' => 'nome',
                'label' => 'Nome',
                'rules' => 'required'
            ),
            // callback_validate_cnpj
            array(
                'field' => 'cnpj',
                'label' => 'CNPJ ',
                'rules' => 'trim|required|callback_validate_cnpj'
            ),
            array(
                'field' => 'telefone-ddd',
                'label' => 'ddd ',
                'rules' => 'trim|required|numeric'
            ),
            array(
                'field' => 'telefone-numero',
                'label' => 'Telefone',
                'rules' => 'trim|required|numeric'
            ),
            array(
                'field' => 'celular-ddd',
                'label' => 'ddd celular',
                'rules' => 'trim|required|numeric'
            ),
            array(
                'field' => 'celular-numero',
                'label' => 'Celular',
                'rules' => 'trim|required|numeric'
            ),
            array(
                'field' => 'email',
                'label' => 'Email',
                'rules' => 'required|valid_mail'
            ),
            array(
                'field' => 'localidade',
                'label' => 'Localidade',
                'rules' => 'required'
            ),
            array(
                'field' => 'actives_description',
                'label' => 'Tipo ativos',
                'rules' => 'required'
            )
        );

        $this->form_validation->set_rules($config);
        if ($this->form_validation->run() == FALSE) {
            $this->quero_vender();
        } else {

            $this->config->load('email', TRUE);
            $_mail = $this->tpl_mail_send;
            $_to = $this->config->item('emails_sending', 'email');
            $data = array(
                'EMAIL' => $this->input->post('email'),
                'ATIVOS' => $this->input->post('actives_description'),
                'CNPJ' => $this->input->post('cnpj'),
                'NOME' => $this->input->post('nome'),
                'LOCALIZACAO' => $this->input->post('cidade') . '/' . $this->input->post('uf'),
                'NOME_FANTASIA' => $this->input->post('nome_fantasia'),
                'TELEFONE' => '(' . $this->input->post('telefone-ddd') . ')' . $this->input->post('telefone-numero'),
                'CELULAR' => '(' . $this->input->post('celular-ddd') . ')' . $this->input->post('celular-numero')
            );
            $_mail->data($data);
            $_mail->to($_to);
            $_mail->subject('Novos negócios - Quero Vender');
            if ($_mail->send('contato', 'quero_vender')) {
                Utils::FlashMessage(Utils::message('i_seller_success'));
            }

            redirect('quero-vender');
        }
    }

    function saveQueroComprar() {
        $this->load->library('form_validation');
        $config = array(
            array(
                'field' => 'nome',
                'label' => 'Nome',
                'rules' => 'required'
            ),
            array(
                'field' => 'telefone-ddd',
                'label' => 'ddd ',
                'rules' => 'trim|required|numeric'
            ),
            array(
                'field' => 'telefone-numero',
                'label' => 'Telefone',
                'rules' => 'trim|required|numeric'
            ),
            array(
                'field' => 'email',
                'label' => 'Email',
                'rules' => 'required|valid_mail'
            ),
            array(
                'field' => 'categoria',
                'label' => 'Categoria',
                'rules' => 'required|trim'
            )
        );

        $this->form_validation->set_rules($config);
        if ($this->form_validation->run() == FALSE) {
            $this->quero_comprar();
        } else {
            $this->session->set_flashdata('success_fale_conosco', 'Cadastro processado com sucesso.');
            // $this->save_new_cliente();
            $this->db->insert('quero_comprar', array(
                'nome' => $this->input->post('nome'),
                'telefone' => $this->input->post('telefone-ddd') . $this->input->post('telefone-numero'),
                'email' => $this->input->post('email'),
                'categoria' => $this->input->post('categoria'),
                'descricao' => $this->input->post('ativos')
            ));

            redirect('quero-comprar');
        }
    }

    function confirm_password($str) {
        if ($str !== $this->input->post('password')) {
            $this->form_validation->set_message('confirm_password', 'O campo %s precisa ser igual a senha');
            return FALSE;
        } else {
            return TRUE;
        }
    }

    function lotesLeilao($id) {
        $this->data ['categorie'] = 'todos';
        $this->data ['filterTipo'] = 'todos';
        $this->data ['localization'] = false;
        $this->data ['by_cidade'] = false;
        $this->data ['printCatalogo'] = true;

        $this->data ['id'] = $id;
        $this->data ['count_estados'] = $this->Estados_M->get_count_lotes($id);
        $this->data ['count_categories'] = $this->Categories_M->get_with_subcategories($id);
        $this->data ['lotes'] = $this->Lotes_M->get_all_by_leilao($id);


        //$this->data['navbar_header'] = $this->load->view('frontend/public/navbar_header',$this->data,true);


        $this->data ['info_habilitacao'] = $this->data ['lotes']['0'];
        $this->data ['info_habilitacao'] = $this->load->view('frontend/public/header-info-habilitacao', $this->data, true);
        $this->template('frontend/public/lotes_loop');
    }

    public function PrintCatalogo_ajax($id) {
        echo $this->PrintCatalogo($id, true);
    }

    public function PrintCatalogo($id, $return = false) {
        $data = $this->Lotes_M->get_all_by_leilao($id);

        $this->template = 'print';
        /*
          $this->table->set_template(array(
          'table_open' => '<table class="table table-bordered table-striped">'
          ));

          $this->table->set_heading(array(
          'Nº LOTE',
          'DESCRIÇÃO',
          'INFORMAÇÕES'
          ));
          foreach ($data as $row) :

          $this->table->add_row(array(
          'data' => $row->NUM_LOTE,
          'style' => 'width:10%;'
          ), array(
          'data' => $row->DESCRICAO,
          'style' => 'width:20%'
          ), array(
          'data' => '<span style="font-size:8pt;">' . '<strong>Localização</strong> : ' . $row->LOCALIZACAO . ' / ' . $row->UF . '<br/>' . strip_tags($row->DESCRICAO_DETALHADA) . '</span>'
          ));
          endforeach
          ;
         */
        $this->data ['row'] = $data ['0'];
        // $this->data ['table_print'] = $this->table->generate();
        $this->data['lotes'] = $data;

        if ($return) {
            return $this->data['table_print'];
        }
        $this->template('frontend/print/index');
    }

    function password($key) {
        $this->session->set_userdata('key_change_password', $key);
        redirect(BASE_URL_USER . '/changePassword');
    }

    function detailLote($id, $leilao_id) {

        // update visitas
        $this->Visitas_M->update($id);
        $this->data ['printCatalogo'] = true;
        $this->data ['count_estados'] = $this->Estados_M->get_count_lotes($leilao_id);
        $this->data ['count_categories'] = $this->Categories_M->get_with_subcategories($leilao_id);

        $lotes = $this->Lotes_M->lotes_detail($leilao_id);
        $this->data ['paginate'] = array();
        $this->data ['ofertas'] = array();
        if (count($lotes) > 0) {
            foreach ($lotes as $key => $row) :
                $this->data ['paginate'] [] = $key;
                // $this->data['ofertas'][$key] = $row->LAST_LANCE == NULL ? $row->LANCE_INICIAL : $row->LAST_LANCE;
            endforeach
            ;
        }
        $this->data ['lote'] = $lotes->$id;
        $this->data ['info_habilitacao'] = $this->data ['lote'];

        $this->data ['info_habilitacao'] = $this->load->view('frontend/public/header-info-habilitacao', $this->data, true);
        $this->template('frontend/public/detalhe-lote');
    }

    function ativosLote() {
        
    }

    function activeNewUser($key) {
        $row_in = $this->db->get_where('clientes', array(
                    'LIBERADO' => 'N',
                    'KEY_ACTIVATION' => $key
                ))->row();
        $row_ac = $this->db->get_where('clientes', array(
                    'LIBERADO' => 'S',
                    'KEY_ACTIVATION' => $key
                ))->row();
        if ($row_in) :
            $ac = $this->db->update('clientes', array(
                'LIBERADO' => 'S'
                    ), array(
                'KEY_ACTIVATION' => $key
            ));
            if ($ac) {

                $this->session->set_flashdata('message_is_activation', 'Seu usuário já está ativo, bem vindo a Leiloar');
            }








        endif;

        if ($row_ac) :

            $this->session->set_flashdata('message_is_activation', 'Seu usuário já está ativo');







        endif;

        redirect();
    }

    function addNewHabilitacao() {
        $data ['error'] = Actions::saveHabilitacao(userData()->id, $this->input->post('leilao_id'));

        header('content-type:text/json;charset="utf-8;"');
        echo json_encode($data);
    }

    function countLoteVisit($id, $id2, $redirect = true) {
        // detalhes-lote
        $this->db->insert('visitas_lotes', array(
            'LOTE_ID' => $id
        ));

        if ($redirect) {
            redirect('detalhes-lote/' . $id . '/' . $id2);
        }
    }

    /**
     * panelOnline 
     * Show all lotes by leilao 
     * @param int $id codigo do leilao
     * 
     */
    function panelOneLine($id) {
        $this->template = 'painel';
        $this->data ['leilao_id'] = $id;
        $this->data ['num_favoritos'] = $this->Favoritos_M->count(array(
            'USER_ID' => userData()->id,
            'LEILAO_ID' => $id
        ));
        $this->data ['lotes'] = $this->Lotes_M->get_all_by_leilao($id);

        $this->getStatisticsLancesUser($id, false);
        $this->template('frontend/public/panel');
    }

    function getStatisticsLancesUser($id, $json_enc = true) {
        $error = true;
        $this->data['lances_superados'] = 0;
        $this->data['lances_ganhadores'] = 0;
        if (userData()->id && userData()->group == 'member') {
            $error = false;


            $lnc = $this->Lances_M->by_user_count(userData()->id, $id);
            if ($lnc) {

                $this->data['lances_superados'] = $lnc->LANCES_SUPERADOS;
                $this->data['lances_ganhadores'] = $lnc->LANCES_GANHADORES;
            }
        }

        if ($json_enc)
            $this->response_json(array('lances_superados' => $this->data['lances_superados'], 'lances_ganhadores' => $this->data['lances_ganhadores'], 'error' => $error));
    }

    function addLanceUser($uid = null, $lid = null, $login = null, $tipo = 'M', $return = FALSE) {
        $data ['error'] = true;
        sleep(1);
        if (userData()->id == 0 && is_null($uid)) {
            $data ['message'] = Utils::message('init_new_login');
            $this->response_json($data);
        }

        if (userData()->group != 'member' && is_null($uid)) {
            $data ['message'] = Utils::message('action_no_allowed');
            $this->response_json($data);
        }
        if ($this->input->post('autoLance') && $this->input->post('autoLance') !== 'false') {
            $this->confirmAutoLance($this->input->post('autoLance'));
            $this->response_json(array('error' => false));
        }
        if ($tipo == 'M') {
            $this->Lances_Automaticos_M->resetRead($this->input->post('lote_id'));
        }
        if ($this->input->post('updtime') == 'yes') {

            $is_time_plus = $this->Lances_Tempo_Extra_M->get_by(array('LOTE_ID' => $this->input->post('lote_id')), true);
            $id = $is_time_plus ? $is_time_plus->ID : null;
            $data_plus = array('TEMPO' => strtotime('+3 minutes'),
                'LOTE_ID' => $this->input->post('lote_id'),
                'LEILAO_ID' => $this->input->post('leilao_id'));
            if (!is_null($id)) {
                $data_plus['CREATE'] = date('Y-m-d');
            }
            $this->Lances_Tempo_Extra_M->save($data_plus, $id);
        }


        $user = new stdClass ();
        $user->id = is_null($uid) ? userData()->id : $uid;
        $user->login = is_null($login) ? userData()->login : $login;
        $id = is_null($lid) ? $this->input->post('lote_id') : $lid;
        $user->tipo = $tipo;


        $d = $this->Lances_M->add($id, $user, ($this->input->post('m') ? $this->input->post('m') : 1));

        if ($d) {
            $data ['error'] = false;
            $data ['message'] = Utils::message('save_success');
        }
        if ($return) {
            return;
        }
        $this->response_json($data);
    }

    function save_unique_bid_user_ativo($id = null, $idUser = null, $value = null) {
        if (is_null($id) || is_null($idUser) || is_null($value)) {
            return false;
        }
        $row = $this->db->get_where('bid_temp_counter', array(
                    'LOTE_ID' => $id,
                    'USER_ID' => $idUser
                ))->row();
        if (!$row) {
            $this->db->insert('bid_temp_counter', array(
                'LOTE_ID' => $id,
                'USER_ID' => $idUser,
                'VALOR' => $value
            ));
            return true;
        }

        if ($row->USER_ID == $idUser && $row->VALOR == $value) {
            return false;
        }
        if ($row->USER_ID != $idUser || $row->VALOR != $value) {
            $this->db->update('bid_temp_counter', array(
                'LOTE_ID' => $id,
                'USER_ID' => $idUser,
                'VALOR' => $value
                    ), array(
                'ID' => $row->ID
            ));
            return true;
        }
    }

    function updateTime() {
        if ($this->input->post('itime')) {
            // $this->db->update('lotes_plus_time', array('TIME' => $this->input->post('itime')), array('ATIVO_ID' => $this->input->post('id')));
        }
    }

    /**
     * setLanceAuto
     * Reponsavel por verificar se o exist lances automaticos para os lotes do leilão
     * @param int $id codigo do leilao
     * @return void
     */
    function _autoLance($row, $lances_auto) {
        $num_loadeds = 0;
        $num_no_loadeds = 0;
        if (isset($lances_auto[$row->ID])) {
            foreach ($lances_auto[$row->ID] as $iduser => $lrow) {
                // lance user has not lance in moment
                if ($iduser != $row->USER_ID && $lrow->VALOR >= ($row->LAST_LANCE + $row->INCREMENTO) && $lrow->READ == 0) {
                    $this->Lances_Automaticos_M->save(array('READ' => 1), $lrow->ID);
                    //save new lance
                    $this->addLanceUser($lrow->USER_ID, $row->ID, $lrow->LOGIN, 'A', TRUE);
                }

                if ($lrow->VALOR < ($row->LAST_LANCE + $row->INCREMENTO)) {
                    $this->Lances_Automaticos_M->delete($lrow->ID);
                }
            }
            //reset onloaded    
            $num = $this->Lances_Automaticos_M->count(array('READ' => 1, 'LOTE_ID' => $row->ID));
            if ($num == count($lances_auto[$row->ID])) {
                $this->Lances_Automaticos_M->resetRead($row->ID);
            }
        }

        /*
          if ($lotes) {
          $num_loadeds = $lotes['0']->LOADED;
          $num_no_loadeds = $lotes['0']->NO_LOADED;
          $in_lotes = $this->Lances_M->lotes_in($id);

          $lances_lotes = new stdClass();
          if ($in_lotes) {
          foreach ($in_lotes as $lote) {
          $str = $lote->LOTE_ID;
          $lances_lotes->$str = $lote;
          }
          }

          $data = array();
          // print_r($in_lotes);
          foreach ($lotes as $item) :
          $lt = $item->LOTE_ID;
          //checando se o já foi lido.
          if (!$in_lotes) {
          // $this->Lances_Automaticos_M->save(array('READ'=>1),$item->ID);
          $this->addLanceUser($item->USER_ID, $item->LOTE_ID, $item->LOGIN, 'A', TRUE);
          }
          //exists lances
          if (isset($lances_lotes->$lt)) {
          $_lote = $lances_lotes->$lt;
          $val = (double) $_lote->INCREMENTO;
          $max_oferta = (double) $item->VALOR;


          //user is diff no lance
          if (($_lote->USER_ID != $item->USER_ID) && $val <= $max_oferta) {
          //$this->Lances_Automaticos_M->save(array('READ'=>1),$item->ID);
          $data[] = array('VALOR' => $max_oferta - $val, 'READ' => 1, 'ID' => $item->ID);


          $this->addLanceUser($item->USER_ID, $item->LOTE_ID, $item->LOGIN, 'A', TRUE);
          }
          }
          endforeach
          ;

          $this->Lances_Automaticos_M->update_batch($data);
          //
          } */
    }

    function getDataLoteLances() {
        sleep(1);

        // $in_lotes = '"'.implode('","',).'"';
        //$in_lotes = 1863;
        $d = $this->Lotes_M->get_in($_POST['lotes']);
        $l_auto = $this->Lances_Automaticos_M->get_in($_POST['lotes']);

        $has_auto_lances = array();
        if ($l_auto) {
            foreach ($l_auto as $key => $lca) {
                $has_auto_lances[$lca->LOTE_ID][$lca->USER_ID] = $lca;
            }
        }

        $response = array(
            'num_rows' => 0,
            'data' => array()
        );
        if ($d) {
            foreach ($d as $key => $row) :
                $val = $row->LAST_LANCE == NULL ? $row->LANCE_INICIAL : $row->LAST_LANCE;


                $obj = array(
                    'ID' => $row->ID,
                    'LOGIN' => $row->GANHADOR == NULL ? '' : $row->GANHADOR,
                    'VALOR' => number_format($val, 2, ',', '.'),
                    'TIPO' => $row->TIPO,
                    'USER_ID' => $row->USER_ID,
                    'NEXT_PRICE' => number_format($val + $row->INCREMENTO, 2, ',', '.'),
                    'ENABLED_LANCE_AUTO' => false,
                    'TIME' => !is_null($row->TEMPO_EXTRA) && strtotime($row->FECHAMENTO) < $row->TEMPO_EXTRA ? $row->TEMPO_EXTRA : strtotime($row->FECHAMENTO),
                    'LANCES' => $row->LANCES,
                    'COMPRADORES' => $row->COMPRADORES
                );

                if (userData()->id > 0) {

                    $obj['ENABLED_LANCE_AUTO'] = isAutoLance(userData()->id, $row->ID);
                }

                $response ['data'][] = (object) $obj;

                // SAVE LANCE AUTO IF EXIST;
                $this->_autoLance($row, $has_auto_lances);

            endforeach
            ;
            $response ['num_rows'] = $key + 1;
        }


        // print_r($response);
        //print_r($has_auto_lances);
        $this->response_json($response);
    }

    function getDataAtivosLances() {
        $response ['error'] = true;

        if (isset($_POST ['lotes']) && count($_POST ['lotes'])) {
            $response ['data'] = array();
            $response ['error'] = false;
            foreach ($_POST ['lotes'] as $value) {
                $total = $this->Lances_M->get_num_rows_ativos($value);
                $compradores = $this->Lances_M->get_num_compradores_ativos($value);
                $this->db->order_by('ID', 'DESC');

                $response ['data'] [] = array(
                    'lote' => $value,
                    'total' => $total,
                    'compradores' => $compradores,
                    'row' => $this->Lances_M->get_by(array(
                        'LOTE_ID' => $value
                            ), true)
                );
            }
        }
        $this->response_json($response);
    }

    /**
     * getHistoryLote
     * Recupera as informações de ofertas de usuários.
     * @param int $id codigo do lote 
     * @return html tabela com os dados 
     */
    function getHistoryLote($id) {
        $data['lances'] = $this->Lances_M->getByDataLote($id);
       
        $data['last_lances'] = $this->Lances_M->last($id);
        $this->load->view('frontend/public/historico_lances', $data);
    }

    function onCloseLote() {

        $this->finishLote();
        $this->closeLeilao($this->input->post('leilao'));
    }

    function finishLote($ajax = true, $obj = null) {
        $this->load->model(array('Lances_Arrematados_M', 'Lances_M'));
        $lote = $this->input->post('lote');

        $leilao = $this->input->post('leilao');
        $this->db->trans_start();
        $exist_lances_arrematados = $this->Lances_Arrematados_M->get_by(array(
            'LOTE_ID' => $lote,
            'LEILAO_ID' => $leilao
                ), true);

        $response ['success'] = false;
        if ($exist_lances_arrematados) {
            $response ['success'] = true;
        } else {
            $row = $this->Lances_M->info_lote($lote, $leilao);
            $is_send_mail = false;
            $id = 0;
            if ($row) {
                $condicional = $row->VALOR_MINIMO > $row->TOTAL ? true : false;
                // exist buyer
                $data_insert = array(
                    'LOTE_ID' => $row->LOTE_ID,
                    'LEILAO_ID' => $row->LEILAO_ID,
                    'USER_ID' => $row->USER_ID,
                    'TOTAL' => $row->TOTAL,
                    'LANCE_ID' => $row->ID,
                    'DATAHORA' => date('Y-m-d H:i:s'),
                    'CONDICIONAL' => $condicional ? 'S' : 'N',
                    'VENDIDO' => !$condicional ? 'S' : 'N'
                );
                $is_send_mail = true;
                $id = $this->Lances_Arrematados_M->save($data_insert);
                $this->Lotes_M->save(array('CLOSED' => 'S'), $row->LOTE_ID);
            }
            if ($id) {
                $response ['success'] = true;
                if ($is_send_mail) {
                    $this->sendMailBidChampion($row);
                }
                //$this->closeLeilao();
            }
        }
        $this->db->trans_complete();
        if ($this->db->trans_status() === FALSE) {
            $response ['success'] = true;
        }

        if (!$ajax) {
            return $response ['success'];
        }

        $this->response_json($response);
    }

    function updatehashTime() {
        $p = $this->diff($this->input->post('time'), date('Y-m-d H:i:s'));
        header('content-type:text/json;charset="utf-8;"');
        echo json_encode($p);
    }

    function closeLeilao($id = null) {
        $this->db->trans_start();
        $id = is_null($id) ? $this->input->post('leilao') : $id;

        $lotes_leilao = $this->Lotes_M->count(array('LEILAO_ID' => $id));
        $lotes_leilao_closed = $this->Lotes_M->count(array('LEILAO_ID' => $id, 'CLOSED' => 'S'));
        if ($lotes_leilao == $lotes_leilao_closed) {
            $this->Leilao_Model->save(array('STATUS' => 4), $this->input->post('leilao'));
        }

        $this->db->trans_complete();
        if ($this->db->trans_status() === TRUE) {
            return true;
        }
        return false;
    }

    function diff($date_, $date__) {
        $date1 = $date_;
        $date2 = $date__;
        $full_seconds = intval((strtotime($date1) - strtotime($date2)));
        $days = intval((strtotime($date1) - strtotime($date2)) / 86400);
        $a = ((strtotime($date1) - strtotime($date2))) % 86400;
        $hours = intval(($a) / 3600);
        $a = ($a) % 3600;
        $minutes = intval(($a) / 60);
        $a = ($a) % 60;
        $seconds = $a;

        return array(
            'days' => $days,
            'hours' => $hours,
            'minutes' => $minutes,
            'seconds' => $seconds,
            'full_seconds' => $full_seconds
        );
    }

    function verify_closed() {
        $leioes = $this->Leilao_Model->onClose();
        if ($leioes) {
            foreach ($leioes as $row) :
                $_POST ['leilao'] = $row->LEILAO_ID;
                $_POST ['lote'] = $row->ID;
                // closing lote
                if (!$row->HAS_TIME_EXTRA) {
                    $this->finishLote(false);
                }
                //close lote no lance 
                if (!$row->HAS_TIME_EXTRA && is_null($row->USER_ID)) {

                    $this->Lotes_M->save(array('CLOSED' => 'S'), $row->ID);
                }




            endforeach;

            $this->closeLeilao($leioes['0']->LEILAO_ID);
        }
    }

    function Demo() {
        echo '<pre>';
        $row = $this->Lances_M->info_lote(118, 19);

        //  print_r($row->TOTAL < $row->VALOR_MINIMO);
        $this->sendMailBidChampion($row);
    }

    function sendMailBidChampion($row) {

        if (!is_object($row)) {
            return false;
        }
        $tpl_mail = $this->tpl_mail_send;

        $tpl_mail->to($row->EMAIL);
        $is_condicional = $row->TOTAL < $row->VALOR_MINIMO ? true : false;
        $tpl_mail->subject(sprintf(lang_system('public_subject_mail_winner'), $row->LOTE_ID, $row->LEILAO_ID));
        $row->TAXA = get_taxa($row->TOTAL);
        $data['URL_HASH'] = site_url('password-' . base64_encode($row->USER_KEY));
        $data['COMITENTE'] = $row->NOME_FANTASIA;
        $data['DATA_LEILAO'] = extract_data($row->DATA, '/');
        $data['HORA_LEILAO'] = extract_time($row->DATA);
        $data['NUMERO_LOTE'] = $row->NUM_LOTE;
        $data['DESCRICAO_LOTE'] = $row->DESCRICAO;
        $data['VALOR_LANCE'] = number_format($row->TOTAL, 2, ',', '.');
        $data['COMISSAO_LEILOEIRO'] = number_format($row->COMISSAO, 2, ',', '.');
        $data['TAXA_ADMINISTRATIVA'] = number_format($row->TAXA, 2, ',', '.');
        $data['USER_NAME'] = $row->LOGIN;

        $tpl_mail->data($data);

        $template = !$is_condicional ? 'email_ganhador' : 'email_ganhador_condicional';

        if (!$tpl_mail->send('financeiro', $template)) {
            log_message('error', 'Email não enviado para o ganhador');
        }
    }

    // login
    function login() {

        $this->data['redirect_page'] = isset($this->gets['r']) ? '?r=' . $this->gets['r'] : '';
        $this->template('frontend/public/login');
    }

    function addFavoritos($id) {

        if (!$this->Favoritos_M->get_by(array(
                    'LOTE_ID' => $id,
                    'USER_ID' => userData()->id
                ))) {
            $this->Favoritos_M->save(array(
                'LOTE_ID' => $id,
                'USER_ID' => userData()->id
            ));
        }
        redirect($this->gets['r']);
    }

    function removeFavoritos($id) {

        if (userData()->id > 0) {

            $this->Favoritos_M->delete(array('LOTE_ID' => $id, 'USER_ID' => userData()->id));
        }
        redirect($this->gets['r']);
    }

    function saveUserNewsLetter() {
        $this->load->library('form_validation');
        $config = array(
            array(
                'field' => 'email',
                'label' => 'Email',
                'rules' => 'required|is_unique[newsletter.EMAIL]|email'
            ),
            array(
                'field' => 'nome',
                'label' => 'Nome',
                'rules' => 'required'
            ),
            array(
                'field' => 'captcha',
                'label' => 'Código ',
                'rules' => 'required|callback_check_captcha'
            )
        );
        $data ['message'] = Utils::message('newsletter_success');
        $data ['success'] = true;
        $this->form_validation->set_rules($config);
        if ($this->form_validation->run() == FALSE) {
            $data ['success'] = false;
            $data ['message'] = validation_errors();
        } else {

            $s = $this->Newsletter_M->save(array(
                'NOME' => $this->input->post('nome'),
                'EMAIL' => $this->input->post('email')
            ));
        }

        header('content-type:application/json;');

        echo json_encode($data);
    }

    /* _createWord
     *    
     *  
     */

    public function _createWord() {
        $chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
        $word = '';
        for ($a = 0; $a <= 5; $a ++) {
            $b = rand(0, strlen($chars) - 1);
            $word .= $chars [$b];
        }
        $this->word = $word;
        return $this;
    }

    function initAutomaticLance($u_id, $l_id) {
        $data ['u_id'] = $u_id;
        $data ['l_id'] = $l_id;
        $data ['lance_automatico'] = $this->Lances_Automaticos_M->get_by(array(
            'USER_ID' => $u_id,
            'LOTE_ID' => $l_id
                ), true);

        $data['lote'] = $this->Lotes_M->get($l_id);
        $this->load->view('frontend/public/lances_automaticos', $data);
    }

    function confirmAutoLance($options) {

        $this->Lances_Automaticos_M->resetRead($this->input->post('lote_id'));
        /*
          $d = $this->Lances_Automaticos_M->save(array(
          'USER_ID' => $this->input->post('u-id'),
          'LOTE_ID' => $this->input->post('l-id'),
          'VALOR' => format_money_db($this->input->post('total'))
          ));
          $r ['error'] = true;
          if ($d) {

          $r ['error'] = false;
          }

          echo json_encode($r); */
        $exist_auto_lance = $this->Lances_Automaticos_M->get_by(array('USER_ID' => userData()->id, 'LOTE_ID' => $this->input->post('lote_id')), true);

        //codigo do lote enviado no momento do lance 
        $row = $this->Lotes_M->get($this->input->post('lote_id'), true);

        if ($row) {

            $data['LOTE_ID'] = $this->input->post('lote_id');
            $data['USER_ID'] = userData()->id;

            $data['VALOR'] = $options['lanceAutomatico'];
            $id = $exist_auto_lance ? $exist_auto_lance->ID : null;
            $this->Lances_Automaticos_M->save($data, $id);
        }
        //$data['AUTO_LANCE'] = true;

        $this->response_json($data);
    }

    function deleteAutoLance() {

        if (userData()->id == 0) {
            return;
        }
        $row = $this->Lances_Automaticos_M->get_by(array(
            'USER_ID' => userData()->id,
            'LOTE_ID' => $this->input->post('l-id')
                ), true);
        if ($row) {
            $d = $this->Lances_Automaticos_M->delete($row->ID);
        }

        $r ['error'] = true;
        $r['message'] = 'Não existe lance automatico para esse lote';
        if ($d) {

            $r ['error'] = false;
        }

        echo json_encode($r);
    }

    function managerFavorites() {
        if (userData()->id == 0) {
            echo Utils::message('init_new_login');
        }

        $this->load->view('frontend/public/manager_favorites', $this->data);
    }

    function deleteFavorites($id) {
        $r['error'] = true;
        $r['message'] = Utils::message('delete_fail');
        if (userData()->id == 0) {
            $r['message'] = Utils::message('init_new_login');
            return;
        }


        if ($this->Favoritos_M->delete($id)) {
            $r['message'] = Utils::message('delete_success');
            $r['error'] = false;
        }
        $this->response_json($r);
    }

    function recoveryPassword() {


        $this->template('frontend/public/recovery');
    }

    function sendPassword() {
        $_email = $this->input->post('email');
        $email = $this->user_manager->get_by_email($_email);
        $rsp['error'] = true;
        $rsp['message'] = Utils::message('no_email_recovery');
        if ($email) {


            $tpl_mail = $this->tpl_mail_send;


            $data['URL_HASH'] = site_url('password-' . base64_encode($email->USER_KEY));
            $tpl_mail->to($_email);
            $tpl_mail->subject('Solicitação de nova senha');
            $tpl_mail->data($data);
            if ($tpl_mail->send('password', 'recovery') === TRUE) {
                $rsp['error'] = false;
                $rsp['message'] = sprintf(Utils::message('email_recovery'), mask_email($_email));
            } else {
                $rsp['message'] = Utils::message('no_sending_email');
            }
        }

        $this->response_json($rsp);
        //URL_HASH
    }

    function newPassword($cod) {
        $key = base64_decode($cod);
        $row = $this->user_manager->get_by(array('USER_KEY' => $key));
        $this->data['_key'] = $key;
        if ($row) {
            $this->data['user_login_recovery'] = $row->LOGIN;
            $this->template('frontend/public/password_new');
            return;
        }
        redirect();
    }

    function savePasswordUser() {
        $rules = array(array(
                'field' => 'cpassword',
                'label' => 'Confirmar Senha',
                'rules' => 'required|callback_confirm_password'
            ),
            array(
                'field' => 'password',
                'label' => 'Senha',
                'rules' => 'required'
        ));
        $rsp['error'] = true;
        $this->load->library('form_validation');

        $this->form_validation->set_rules($rules);
        if ($this->form_validation->run() == FALSE) {
            $rsp['message'] = validation_errors();
        } else {
            $user = $this->Users_M->get_by(array('USER_KEY' => $this->input->post('key')), true);
            $rsp['message'] = Utils::message('no_user_recovery_email');
            if ($user) {
                if ($this->user_manager->update(array('PWD' => $this->input->post('password')), $user->ID)) {
                    $rsp['error'] = false;
                    $rsp['message'] = Utils::message('success_recovery_password');
                }
            }
        }



        $this->response_json($rsp);
    }

    function ajaxDetailLote($id) {
        $d = $this->Lotes_M->get($id, true);

        $tmpl = array(
            'table_open' => '<table class="table table-bordered">',
            'table_close' => '</table>'
        );

        $this->table->set_template($tmpl);

        $this->table->set_heading(array('data' => '<strong>Informa&ccedil;&otilde;es</strong>', 'colspan' => 2));

        $this->table->add_row(array(
            array('data' => '<div class="col-xs-2"><strong>LOTE</strong></div>', 'width' => '60px'),
            array('data' => '<div class="col-xs-8">' . $d->NUM_LOTE . '</div>')
        ));
        $this->table->add_row(array(
            array('data' => '<div class="col-xs-2"><strong>DESCRI&Ccedil;&Atilde;O</strong></div>', 'width' => '60px'),
            array('data' => '<div class="col-xs-8">' . $d->DESCRICAO . '</div>')
        ));
        $this->table->add_row(array(
            array('data' => '<div class="col-xs-2"><strong>DETALHES</strong></div>', 'width' => '60px'),
            array('data' => '<div class="col-xs-8">' . $d->DESCRICAO_DETALHADA . '</div>')
        ));
        $this->table->add_row(array(
            array('data' => '<div class="col-xs-2"><strong>VISITAS</strong></div>', 'width' => '60px'),
            array('data' => '<div class="col-xs-8">(11)3791-2211 / 3791-2255</div>')
        ));
        $images = explode(',', $d->IMAGENS);

        if (!is_array($images)) {
            $images = array($images);
        }
        $_images = '<div class="row">';
        foreach ($images as $img):

            $_images .= '<div class="col-xs-4 form-group"><img src="/public/images/' . $img . '" style="width:100%; height:120px;" class="thumbnail"/></div>';
        endforeach;
        $_images .= '</div>';
        $this->table->add_row(array('colspan' => 2, 'data' => $_images));

        echo '<div class="table-responsive">' . $this->table->generate() . '</div>';
    }

    function demoUpload() {

        echo form_open_multipart('/api/uploadImageLote');
        echo form_upload('uploadFile');
        echo form_submit('', 'Enviar');
        echo form_close();
    }

    function deleleFileDemo() {
        $file = '/public/images/lotes/833386248f629381381348b70ad56e74.jpg';
        $this->load->library('image_work');

        $this->image_work->delete($file);
    }
    function usersOnline(){
        
        $users = $this->session->users_online();
        
        print_r($users);
    }
}

/* End of file welcome.php */
    /* Location: ./application/controllers/home.php */